--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/frontend/libs/emitter.js 2eef1cdf70f1dc62743cb60919ead111088289cb (2eef1cdf) Text, 2.17 KB
T8b949e// SPDX-License-Identifier: 0BSD
T8b949e/**
* Small mitt-compatible event emitter.
* Handlers are stored as arrays on a Map keyed by event type.
* Wildcard listeners use type "*".
* Emit uses a snapshot so handlers may safely on/off during emit.
*/
T8b949e/**
* @typedef {(event: unknown) => void} EmitterHandler
* @typedef {(type: string | symbol, event: unknown) => void} WildcardHandler
* @typedef {Map<string | symbol, Array<EmitterHandler | WildcardHandler>>} HandlerMap
*
* @typedef {object} Emitter
* @property {HandlerMap} all
* @property {(type: string | symbol, handler: EmitterHandler | WildcardHandler) => void} on
* @property {(type: string | symbol, handler?: EmitterHandler | WildcardHandler) => void} off
* @property {(type: string | symbol, event?: unknown) => void} emit
*/
T8b949e/**
* @param {HandlerMap} [all]
* @returns {Emitter}
*/
Tff7b72export Tff7b72function Te6edf3createEmitterTb4b4b4(Te6edf3all Tff7b72= Tff7b72new Tffa657MapTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3allTb4b4b4,
Te6edf3onTb4b4b4(Te6edf3typeTb4b4b4, Te6edf3handlerTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3handler Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3list Tff7b72= Te6edf3allTb4b4b4.Te6edf3getTb4b4b4(Te6edf3typeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3listTb4b4b4) Tb4b4b4{
Te6edf3listTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3handlerTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3allTb4b4b4.Te6edf3setTb4b4b4(Te6edf3typeTb4b4b4, Tb4b4b4[Te6edf3handlerTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3offTb4b4b4(Te6edf3typeTb4b4b4, Te6edf3handlerTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3list Tff7b72= Te6edf3allTb4b4b4.Te6edf3getTb4b4b4(Te6edf3typeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3listTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3handler Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3allTb4b4b4.Te6edf3setTb4b4b4(Te6edf3typeTb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3index Tff7b72= Te6edf3listTb4b4b4.Te6edf3indexOfTb4b4b4(Te6edf3handlerTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3index Tff7b72>= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3listTb4b4b4.Te6edf3spliceTb4b4b4(Te6edf3indexTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3emitTb4b4b4(Te6edf3typeTb4b4b4, Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3list Tff7b72= Te6edf3allTb4b4b4.Te6edf3getTb4b4b4(Te6edf3typeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3listTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3handler Tff7b72of Te6edf3listTb4b4b4.Te6edf3sliceTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3handlerTb4b4b4(Te6edf3eventTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3wild Tff7b72= Te6edf3allTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"*"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3wildTb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3handler Tff7b72of Te6edf3wildTb4b4b4.Te6edf3sliceTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3handlerTb4b4b4(Te6edf3typeTb4b4b4, Te6edf3eventTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {HandlerMap} [all]
* @returns {Emitter}
*/
Tff7b72export Tff7b72default Tff7b72function Te6edf3emitterTb4b4b4(Te6edf3allTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3createEmitterTb4b4b4(Te6edf3allTb4b4b4)Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────